package com.zxcl.config;

import com.zxcl.constant.AuthConstant;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * 描述: [feign的请求拦截]  考虑到每一个微服务可能用到远程调用，门店服务调用商品服务的时候没有走网关，获取不到请求头的信息，所以没有带token。
 * 但是门店服务中有token，只是做远程调用的时候没有把token带过去
 * 所有的微服务远程调用都应该携带token
 * 作者: zxcl
 */
@Component
public class FeignInterceptor implements RequestInterceptor {

    /**
     * 1.浏览器------------>A---------------->B
     * @param requestTemplate 即将要发起的新请求对象
     */
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        // 当前的请求对象 里面是有token
        HttpServletRequest request = requestAttributes.getRequest();
        requestTemplate.header(AuthConstant.AUTHORIZATION, request.getHeader(AuthConstant.AUTHORIZATION));

    }
}
